home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 1 / Gold Medal Software Volume 1 (Gold Medal) (1994).iso / graphics / tierra40.arj / TIERRA / TMONITOR.C < prev    next >
C/C++ Source or Header  |  1992-09-09  |  6KB  |  242 lines

  1. /* tmonitor.c   9-9-92 monitor/reporting routines for the Tierra Simulator */
  2. /* Tierra Simulator V4.0: Copyright (c) 1991, 1992 Tom Ray & Virtual Life */
  3.  
  4. #ifndef lint
  5. static char    tmonitor_sccsid[] = "@(#)tmonitor.c    1.5    7/21/92";
  6. #endif
  7.  
  8. #include <sys/types.h>
  9. #include "license.h"
  10. #include "tierra.h"
  11. #include "extern.h"
  12. #include "tmonitor.h"
  13. #include "trequest.h"
  14.  
  15. #include <mlayer.h>
  16.  
  17.  
  18. /*** These two (TRepBirth, TRepDeath) could really be made one function. ***/
  19.  
  20.  
  21. void TRepBirth( ulStart, ulLength )
  22.   u_long    ulStart;
  23.   u_long    ulLength;
  24. {
  25.   TtOrgEvent        OEV;
  26.   MtStatus        iRet;
  27.  
  28.   OEV.event = htonl('b');
  29.   OEV.start = htonl(ulStart);
  30.   OEV.length = htonl(ulLength);
  31.  
  32.   /* DAN ALGripe( "birth", "%lu x %lu\n", ulStart, ulLength ); */
  33.  
  34.   if (( iRet = MDistributeDataflow( TrtOrgLifeEvent, (pMtOpaque)&OEV,
  35.                     sizeof( OEV ) )) != MsOK )
  36.     /* ALGripe( "TRepBirth", "MDistDF. error (%d)\n", iRet ); */
  37.     { FEError(-1100,NOEXIT,NOWRITE,
  38.         "Tierra TRepBirth() MDistDF. error (%d)\n", iRet );}
  39.  
  40. } /* end TRepBirth() */
  41.  
  42.  
  43. void TRepDeath( ulStart, ulLength )
  44.   u_long    ulStart;
  45.   u_long    ulLength;
  46. {
  47.   TtOrgEvent        OEV;
  48.   MtStatus        iRet;
  49.  
  50.   OEV.event = htonl('d');
  51.   OEV.start = htonl(ulStart);
  52.   OEV.length = htonl(ulLength);
  53.  
  54.   /* DAN ALGripe( "death", "%lu x %lu\n", ulStart, ulLength ); */
  55.  
  56.   if (( iRet = MDistributeDataflow( TrtOrgLifeEvent, (pMtOpaque)&OEV,
  57.                     sizeof( OEV ) )) != MsOK )
  58.     { FEError(-1101,NOEXIT,NOWRITE,
  59.           "Tierra TRepDeath() MDistDF. error (%d)\n", iRet );}
  60.  
  61. } /* end TRepDeath() */
  62.  
  63. void TMoveIP( ulStart, ulPosition)
  64.   u_long    ulStart;
  65.   u_long    ulPosition;
  66. {
  67.   TtIPEvent        IEV;
  68.   MtStatus        iRet;
  69.  
  70.   IEV.event = htonl('m');
  71.   IEV.start = htonl(ulStart);
  72.   IEV.position = htonl(ulPosition);
  73. #ifdef _DBG_ 
  74.   if(Log) {fprintf(tfp_log,"MOVEIP: critter @ %ld ip @ %ld\n",ulStart,
  75.           ulPosition);
  76.         fflush(tfp_log);
  77.     }
  78. #endif
  79.   if (( iRet = MDistributeDataflow( TrtIPEvent, (pMtOpaque)&IEV,
  80.                     sizeof( IEV ) )) != MsOK )
  81.     { FEError(-1102,NOEXIT,NOWRITE,
  82.           "Tierra TMoveIP() MDistDF. error (%d)\n", iRet );}
  83.  
  84. } /* end TMoveIP() */
  85.  
  86. void TMoveD( ulStart, ulFrom, ulTo)
  87.   u_long    ulStart;
  88.   u_long    ulFrom;
  89.   u_long    ulTo;
  90. {
  91.   TtMVEvent        MEV;
  92.   MtStatus        iRet;
  93.  
  94.   MEV.event = htonl('M');
  95.   MEV.start = htonl(ulStart);
  96.   MEV.from = htonl(ulFrom);
  97.   MEV.to = htonl(ulTo);
  98. #ifdef _BDG_  
  99.   if(Log) {fprintf(tfp_log,"MOVED: critter @ %ld from %ld to %ld\n",
  100.            ulStart, ulFrom, ulTo);
  101.         fflush(tfp_log);
  102.     }
  103. #endif 
  104.   if (( iRet = MDistributeDataflow( TrtMVEvent, (pMtOpaque)&MEV,
  105.                     sizeof( MEV ) )) != MsOK )
  106.     { FEError(-1103,NOEXIT,NOWRITE,
  107.           "Tierra TMoveD() MDistDF. error (%d)\n", iRet );}
  108.  
  109. } /* end TMoveD() */
  110.  
  111.  
  112. void TPlan()
  113. {
  114.   TtPlanEvent        PEV;
  115.   MtStatus        iRet;
  116.  
  117.   PEV.m_i_exec = htonl(InstExe.m);
  118.   PEV.num_cells = htonl(NumCells);
  119.   PEV.num_gen = htonl(NumGenotypes);
  120.   PEV.num_sizes = htonl(NumSizes);
  121. #ifdef _BDG_  
  122.   if(Log) {fprintf(tfp_log,"TPLAN: iem %ld nc %ld ng %ld ns %ld\n",
  123.            PEV.m_i_exec , PEV.num_cells , PEV.num_gen , PEV.num_sizes );
  124.        fflush(tfp_log);
  125.     }
  126. #endif
  127.  
  128.   if (( iRet = MDistributeDataflow( TrtPlanEvent, (pMtOpaque)&PEV,
  129.                     sizeof( PEV ) )) != MsOK )
  130.     { FEError(-1103,NOEXIT,NOWRITE,
  131.           "Tierra TPlan() MDistDF. error (%d)\n", iRet );}
  132.  
  133. } /* end TPlan() */
  134.  
  135.  
  136. void TInitOrgLifeEvents( ucOp, hLink )
  137.   u_char    ucOp;
  138.   hMtLinkInfo    hLink;
  139. {
  140.   TtOrgEvent        OEV;
  141.   MtStatus        iRet;
  142.   I32s            ar,ci;
  143.   Pcells        ce;
  144.  
  145.   OEV.event = 'I';
  146.   if (( iRet = MGenRequest( hLink, MrDataflowEvent, TrtOrgLifeEvent,
  147.                 (pMtOpaque)&OEV, sizeof( OEV )) ) != MsOK )
  148.     { sprintf(mes[0], 
  149.          "TInitOrgLifeEvents MGenReq. init begin error (%d)\n", iRet );
  150.     FEMessage(1,mes); }
  151.  
  152.  for (ar = 0; ar < NumCelAr; ar++) for (ci = 0; ci < CelArSiz; ci++)
  153.     {   if (ar == 0 && ci < 2)
  154.             continue;
  155.         ce = &cells[ar][ci];
  156.  
  157.     if ( ce->ld ) {
  158.       if ( ce->mm.s ) {
  159.     OEV.event = htonl('b');
  160.     OEV.start = htonl(ce->mm.p);
  161.     OEV.length = htonl(ce->mm.s);
  162.     /* ALGripe( "birth", "%lu x %lu\n", OEV.start, OEV.length ); */
  163.     if (( iRet = MGenRequest( hLink, MrDataflowEvent, TrtOrgLifeEvent,
  164.                   (pMtOpaque)&OEV, sizeof( OEV ) )) != MsOK )
  165.     { sprintf(mes[0], 
  166.           "TInitOrgLifeEvents MGenReq. df error (%d)\n", iRet );
  167.     FEMessage(1,mes); }
  168.       }
  169.       if ( ce->md.s ) {
  170.     OEV.event = htonl('b');
  171.     OEV.start = htonl(ce->md.p);
  172.     OEV.length = htonl(ce->md.s);
  173.     /* DAN ALGripe( "birth", "%lu x %lu\n", OEV.start, OEV.length );*/
  174.     if (( iRet = MGenRequest( hLink, MrDataflowEvent, TrtOrgLifeEvent,
  175.                   (pMtOpaque)&OEV, sizeof( OEV ) )) != MsOK )
  176.     { sprintf(mes[0], 
  177.       "TInitOrgLifeEvents MGenReq. df error (%d)\n", iRet );
  178.     FEMessage(1,mes); }
  179.       }
  180.     }
  181.   }
  182.   
  183.   OEV.event = htonl('i');
  184.   if (( iRet = MGenRequest( hLink, MrDataflowEvent, TrtOrgLifeEvent,
  185.                 (pMtOpaque)&OEV, sizeof( OEV )) ) != MsOK )
  186.     { sprintf(mes[0], 
  187.               "TInitOrgLifeEvents MGenReq. init end error (%d)\n", iRet );
  188.     FEMessage(1,mes); }
  189.  
  190. } /* end TInitOrgLifeEvents() */
  191.  
  192.  
  193. void TQueryGeneralStats( ucQ, pData, hLink )
  194.   u_char    ucQ;
  195.   pMtOpaque    pData;
  196.   hMtLinkInfo    hLink;
  197. {
  198.   TtGenStats        GS;
  199.   MtStatus        iRet;
  200.  
  201.   GS.memsize = htonl(SoupSize);
  202.  
  203.   if (( iRet = MGenReply( hLink, ucQ, (pMtOpaque)&GS, sizeof( GS ) )
  204.       ) != MsOK )
  205.     { sprintf(mes[0], 
  206.               "TQueryGeneralStats MGenReply error (%d)\n", iRet );
  207.     FEMessage(1,mes); }
  208.  
  209. } /* end TGenStatusQuery() */
  210.  
  211.  
  212. void TQueryOrganism( ucQ, pData, hLink )
  213.   u_char    ucQ;
  214.   pMtOpaque    pData;
  215.   hMtLinkInfo    hLink;
  216. {
  217.  
  218. } /* end TQueryOrganism() */
  219.  
  220.  
  221. void TSimRuncontrol( ucM, pData, hLink )
  222.   u_char    ucM;
  223.   pMtOpaque    pData;
  224.   hMtLinkInfo    hLink;
  225. {
  226.  
  227. if ( ucM == TrtPauseSim )
  228.     AL_run_flag = 0;
  229.   else if ( ucM == TrtResumeSim )
  230.     AL_run_flag = 1;
  231.   else {
  232.     FEError(-1104,NOEXIT,NOWRITE,
  233.         "Tierra TSimRuncontrol() unknown operation (%d)", ucM );
  234.   }
  235.   TPlan();
  236.  
  237. } /* end TSimRuncontrol() */
  238.  
  239.  
  240. /* ---------------------------------------------------------------------- */
  241. /* ---------------------------------------------------------------------- */
  242.